1
เรื่องลึกลับของเหรียญสิบเซนต์และความจริงของเลขทศนิยมแบบลอยตัว
AI017Lesson 3
00:00

แรงเสียดทานพื้นฐานในฟิสิกส์เชิงคำนวณเกิดขึ้นเพราะคอมพิวเตอร์แทนค่าจำนวนจริงด้วย การคำนวณเลขทศนิยมแบบลอยตัวในระบบฐานสอง (ฐาน2). แตกต่างจากแนวคิดของมนุษย์ที่ใช้เลขฐานสิบ (ทศนิยม) ฮาร์ดแวร์จัดเก็บค่าในระบบฐานสอง (ไบนารี) ซึ่งทำให้เกิดปรากฏการณ์ การซึมผ่านของความเป็นนามธรรม: จำนวนเศษส่วนทศนิยมง่ายๆ เช่น 0.1 ไม่สามารถแทนค่าได้อย่างแม่นยำ

1. ความจริงของเลขทศนิยมแบบลอยตัว

Go มีประเภทหลักสองประเภทสำหรับจำนวนจริง: float32 และ float64. เมื่อใช้รูปแบบการประกาศตัวแปรแบบย่ออย่างเช่น price := 0.0, Go จะใช้ค่าเริ่มต้นเป็น float64. ประเภทเหล่านี้เป็นเพียงการประมาณค่าของความจริง ไม่ใช่ค่าทางคณิตศาสตร์ที่แน่นอน

0.1 + 0.1 = ?ก็อฟเฟอร์: "ทำไมถึงไม่ใช่ 0.2?"0.0001100110011...

2. เรื่องลึกลับของ 0.1

ในระบบฐานสิบ $1/3$ จะได้ผลลัพธ์เป็นเลขทศนิยมที่ซ้ำไปเรื่อยๆ ($0.333...$) ในขณะที่ในระบบฐานสอง ค่า $0.1$ จะกลายเป็น เศษส่วนที่ซ้ำไปเรื่อยๆ แบบไม่มีที่สิ้นสุด. เนื่องจากหน่วยความจำของคอมพิวเตอร์มีจำกัด จึงต้องตัดทอนเศษส่วนนี้ ส่งผลให้เกิดข้อผิดพลาดสะสม ตัวอย่างเช่น $0.1 + 0.2$ จะได้ผลลัพธ์เป็น $0.30000000000000004$ แทนที่จะเป็น $0.3$ อย่างแน่นอน

คำเตือน: อย่าใช้ == ในการเปรียบเทียบเลขทศนิยมแบบลอยตัวในตรรกะของวงจร ด้วยเหตุผลที่ความคลาดเคลื่อนเล็กน้อยเหล่านี้จะทำให้การเปรียบเทียบล้มเหลว

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>